/*
网络工具类 头文件
*/
#ifndef COM_NETWORK_TOOL_H
#define COM_NETWORK_TOOL_H

#include <stdio.h>  // 标准输入输出库，提供 printf、scanf 等函数，用于控制台输入输出
#include <stdlib.h> // 标准库，提供内存分配、随机数、程序退出等函数
#include <string.h> // 字符串操作库，提供 strcpy、strlen、memcpy 等函数
#include "stdarg.h" // 可变参数库，用于实现函数接收可变数量参数，如 printf

#include "cm_mqtt.h"                  // MQTT 协议相关操作封装头文件，用于设备与服务器进行消息收发
#include "cm_mem.h"                   // 内存管理封装头文件，提供动态内存分配和释放接口
#include "cm_sys.h"                   // 系统操作封装头文件，提供系统信息、时间、日志等功能
#include "cm_os.h"                    // 操作系统接口封装头文件，提供任务管理、消息队列、延时等功能
#include "cJSON.h"                    // JSON 解析和生成库，用于处理 JSON 格式的数据
#include <wolfssl/wolfcrypt/coding.h> // WolfSSL 加密库编码相关函数，如 Base64、ASN.1 编码等
#include <wolfssl/wolfcrypt/hmac.h>   // WolfSSL HMAC（哈希消息认证码）算法支持，用于数据完整性和认证
#include "cm_pm.h"                    // 电源管理封装头文件，用于设备休眠、唤醒等电源控制
#include "cm_modem.h"                 // 模块通信接口封装头文件，用于控制和管理蜂窝/无线通信模块

#include "cm_gpio_tool.h" // GPIO 工具头文件，包含 GPIO 初始化、写、读、翻转等函数

/*********************** NETLIGHT GPIO 配置 begin ***********************/
// 网络灯 NETLIGHT，对应 GPIO4
extern CM_GPIO_Handle_t netlight;
// 低电平 灭灯
#define NETLIGHT_OFF CM_GPIO_LEVEL_LOW
// 高电平 亮灯
#define NETLIGHT_ON CM_GPIO_LEVEL_HIGH
/*********************** NETLIGHT GPIO 配置 end   ***********************/

/**
 * @brief 等待模块 PDP 激活
 * @param timeout_s 超时时间（秒）
 * @return 0 成功激活 PDP
 *         -1 超时未激活
 */
int wait_pdp_ready(int timeout_s);


/**
 * @brief 初始化网络灯并根据PDP激活状态控制其亮灭
 * 
 * 函数流程：
 * 1. 初始化网络灯GPIO配置
 * 2. 等待模块PDP激活（超时时间10秒）
 * 3. 根据激活结果控制网络灯状态：激活成功则点亮，失败则熄灭
 * 
 *
 * @return int 执行结果：0表示成功（含激活成功/失败但流程完成），-1表示GPIO初始化失败
 */
int netlight_init_and_control(void);


#endif // COM_NETWORK_TOOL_H
